package com.cskaoyan.javase.array._3momory;

/**
 * 练习3：
 * 定义两个数组：
 * 静态初始化一个数组，输出数组名，元素取值，长度
 * 然后声明第二个数组，把第一个数组的地址赋值给第二个数组。
 * 输出第二个数组的数组名，元素取值，长度
 * 然后给第二个数组赋值，再次输出两个数组的名及元素
 *
 * 思考：
 * 指向同一个对象的引用，这时如果操作某一个引用修改对象中元素的取值，那请问再使用另外一个引用查看，取值会改变吗？
 * 肯定会
 *
 * @since 10:05
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo5 {
    public static void main(String[] args) {
        double[] arr = {0.1, 0.2};
        /*
            Java中的引用是很安全的，引用和它的对象关联很紧密，一个引用不能乱指向一个对象
         */
        double[] arr2 = arr;
        int[] arr3 = new int[3];
        double[] arr4 = new double[1];

        /*
            arr和arr2引用中存放的地址是一致，所以它们指向同一个对象，输出对象名内容一致
            而arr3不是和arr arr2指向同一个对象，输出对象名的内容不一样
            在Java当中，使用new关键字，一定会创建一个独立的，完全不同的新的对象。
         */
        System.out.println(arr);
        System.out.println(arr2);
        System.out.println(arr3);

        /*
            比较运算符 == != 比较引用数据类型
            总结：引用数据类型用"=="比较，首先它们的数据类型应该是一致的。
            其次比较的是引用中存放的地址，换句话说比较的是指向的对象是否是同一个对象
            这个比较的规则是很苛刻的，只有当两个引用指向的是完全同一个对象时，结果才是true
            说白了，自己和自己比较，结果才是true
         */
        System.out.println(arr == arr2);
        // System.out.println(arr == arr3);
        System.out.println(arr == arr4);

        arr[0] = 666.6;
        System.out.println(arr2[0]);
    }
}
